package com.atguigu.demojuc.chap04;

import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
import java.util.concurrent.CopyOnWriteArrayList;

public class testList {
    public static void main(String[] args) {
        //List<String> list = new ArrayList<>();线程不安全
        //List<String> list = new Vector<>();线程安全
        //List<String> list = Collections.synchronizedList(new ArrayList<>());线程安全
        List<String> list = new CopyOnWriteArrayList<>();
        /*
        CopyOnWrite并发容器用于读多写少的并发场景
        缺点：
        1. 内存占用问题。写的时候会创建新对象添加到新容器里，而旧容器的对象还在使用，所以有两份对象内存。
        2. 数据一致性问题。CopyOnWrite容器只能保证数据的最终一致性，不能保证数据的实时一致性。所以如果你希望写入的数据，马上能读到，请不要使用CopyOnWrite容器。
         */
        for (int i = 0; i < 200; i++) {
            new Thread(() -> {
                list.add(UUID.randomUUID().toString().substring(0, 8));
                System.out.println(list);
            }, String.valueOf(i)).start();
        }
    }
}
